﻿using System;
using System.Windows.Forms;

namespace StructuredLightSystemUI
{
    /// <summary>
    /// 主页面
    /// </summary>
    public partial class ConMain : UserControl
    {
        /// <summary> 切换页面 </summary>
        internal Action<ToolStripMenuPage> ChangePage;

        #region 构造、初始化
        /// <summary>
        /// 构造
        /// </summary>
        public ConMain()
        {
            InitializeComponent();

            //备忘录
            InitRemark();
        }

        //加载时
        private void ConMain_Load(object sender, EventArgs e)
        {

        }

        /// <summary>
        /// 生成备注
        /// </summary>
        private void InitRemark()
        {
            rtb_remark.Text =
                $"-----------------------------------------备注-----------------------------------------\r\n" +
                //-----------------------------------------
                $"【准备阶段】\r\n" +
                $"  ①调试相机，调整光圈、焦距；\r\n" +
                $"      *目前仅支持海康相机 \r\n" +
                $"  ②调试投影仪，调整焦距；\r\n" +
                $"      *型号：XX3D005 \r\n" +
                $"      *分辨率：960 * 540 \r\n" +
                $"      *幅面：0.2m 5.5\"(139.7mm) / 3m 81\"(2057.4mm) \r\n" +
                $"      *波特率：115200\r\n" +
                $"      *工作模式：普通模式\r\n" +
                $"  ③调整相机和投影仪夹角；\r\n" +
                $"  ④在辅助页面生成标定板，并且打印/制造；\r\n" +
                $"      *棋盘格单元格数量必须一个奇数一个偶数。\r\n" +
                $"      *建议打印精度PPI > 300。\r\n" +
                $"      *根据精度建议优先级：陶瓷 > 玻璃基板 > 菲林纸 > KT板 > A4纸。\r\n" +
                $"      *生成图片放入word文档之类软件中根据实际长度设置缩放比。\r\n" +
                //-----------------------------------------
                $"【标定】\r\n" +
                $"  ①在辅助页面生成条纹光栅图片；\r\n" +
                $"      *格雷码仅支持默认参数解码，生成图片的裁切方法为居中裁切\r\n" +
                $"      *相移光栅仅支持生成，不支持解码。\r\n" +
                $"  ②在投影仪测试页面；\r\n" +
                $"      *写入条纹光栅。\r\n" +
                $"      *设置合适连续播放参数。\r\n" +
                $"      *保存标定参数、重建参数。\r\n" +
                $"  ③在相机测试页面；\r\n" +
                $"      *设置合适相机参数。\r\n" +
                $"      *图像格式：建议Mono，Bayer模式下需要手动合成多通道图像。\r\n" +
                $"      *保存标定参数、重建参数。\r\n" +
                $"  ④在标定页面；\r\n" +
                $"      *观察图像是否合适，采集数据，观察数据数量是否一致。\r\n" +
                $"      *选择需要重建的数据。\r\n" +
                $"      *设置合适的标定参数。\r\n" +
                $"      *进行标定，查看误差范围。\r\n" +
                //-----------------------------------------
                $"【重建】\r\n" +
                $"  ①在重建页面；\r\n" +
                $"      *观察图像是否合适，采集数据，观察数据数量是否一致。\r\n" +
                $"      *选择需要重建的数据。\r\n" +
                $"      *选择合适的标定结果。\r\n" +
                $"      *设置合适的重建参数。\r\n" +
                $"      *进行重建，查看点云。\r\n" +
                $"  ②在点云显示页面；\r\n" +
                $"      *查看点云。\r\n" +
                //-----------------------------------------
                $"【常见问题】\r\n" +
                $"  ①采集图像颜色问题；\r\n" +
                $"      *排查海康相机图像格式以及该型号支持的格式。\r\n" +
                $"      *本软件支持RGB、BGR、Bayer、Mono模式。\r\n" +
                $"      *Bayer模式、Mono模式仅提供单通道图像，如若需要请自行编写代码合成多通道图像。\r\n";

        }

        /// <summary> 打开用户控件 </summary>
        public void OpenControl()
        {

        }

        /// <summary> 关闭用户控件 </summary>
        public void CloseControl()
        {

        }
        #endregion

        #region 控件事件
        //相机测试页面
        private void b_camera_Click(object sender, EventArgs e)
        {
            ChangePage?.Invoke(ToolStripMenuPage.相机测试页面);
        }
        //投影仪测试页面
        private void b_projector_Click(object sender, EventArgs e)
        {
            ChangePage?.Invoke(ToolStripMenuPage.投影仪测试页面);
        }
        //标定页面
        private void b_calibration_Click(object sender, EventArgs e)
        {
            ChangePage?.Invoke(ToolStripMenuPage.标定页面);
        }
        //重建页面
        private void b_reconstruct_Click(object sender, EventArgs e)
        {
            ChangePage?.Invoke(ToolStripMenuPage.重建页面);
        }
        //点云显示页面
        private void b_pointCloudShow_Click(object sender, EventArgs e)
        {
            ChangePage?.Invoke(ToolStripMenuPage.点云显示页面);
        }
        //辅助功能页面
        private void b_auxiliaryFunction_Click(object sender, EventArgs e)
        {
            ChangePage?.Invoke(ToolStripMenuPage.辅助功能页面);
        }
        #endregion
    }
}
